package com.guanzhi.config;

import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContext;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.web.authentication.AuthenticationSuccessHandler;

import java.io.IOException;

/**
 * SpringSecurity
 * <p> Package: com.guanzhi.config </p>
 * <p> File: MyAuthenticationSuccessHandler.java </p>
 * <p> Description:  (登录成功处理)</p>
 * <p> Date: 2024/3/30 16:29</p>
 *
 * @author 观之
 * @version 1.0 （代码版本）
 * @email <a href="mailto:guanzhi55634@aliyun.com">观之</a>（邮箱）
 * @date 2024/3/30 16:29
 * @since jdk17（jdk版本）
 */
public class MyAuthenticationSuccessHandler implements AuthenticationSuccessHandler {
    @Override
    public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException, ServletException {
        //自主实现响应逻辑
        //创建空上下文
        SecurityContext emptyContext = SecurityContextHolder.createEmptyContext();
        //我们创建一个新的 Authentication 对象.
        //Spring Security 不关心 SecurityContext 上设置的 Authentication 实现类型。
        //这里，我们使用 TestingAuthenticationToken ，因为它非常简单。
        //更常见的生产场景是 UsernamePasswordAuthenticationToken(userDetails, password, authorities) 。
        //Authentication authenticationContext = new TestingAuthenticationToken("username", "password", "ROLE_USER");
        emptyContext.setAuthentication(authentication);

        //最后，我们在 SecurityContextHolder 上设置 SecurityContext 。 Spring Security 使用此信息进行授权。
        SecurityContextHolder.setContext(emptyContext);
    }

}
